home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / unix / volume25 / ofiles.pch < prev    next >
Encoding:
Text File  |  1991-12-19  |  19.2 KB  |  898 lines

  1. Newsgroups: comp.sources.unix
  2. From: megatek!barto@ucsd.edu (David Barto)
  3. Subject: v25i053: patch to ofiles -- v18i057
  4. Sender: sources-moderator@pa.dec.com
  5. Approved: vixie@pa.dec.com
  6.  
  7. Submitted-By: megatek!barto@ucsd.edu (David Barto)
  8. Posting-Number: Volume 25, Issue 53
  9. Archive-Name: ofiles.pch
  10.  
  11. [ this is a patch to "v18i057:  REVISED ofiles, doesn't need Sun source".  it
  12.   is somehow poetic that i post this the same night i post a new "completely
  13.   reworked" version of ofiles...                    --vix ]
  14.  
  15. This is a patch to the 24 Mar 89 posting of ofiles, comp/sources/unix
  16. Volume 18, issue 57.  This includes some minor editing changes, and
  17. will allow ofiles to now work correctly for sun4 and sun4c machines.
  18.  
  19.     -barto
  20.  
  21. *** ofiles.c    Thu Jun 13 11:57:23 1991
  22. --- ../ofiles.c    Thu Jun 13 11:56:37 1991
  23. ***************
  24. *** 73,88 ****
  25. --- 73,92 ----
  26.   #else
  27.   # define KERNEL
  28.   # include <sys/file.h>
  29.   # ifndef sun
  30.   #  include <sys/inode.h>
  31.   # endif
  32.   # undef KERNEL
  33.   #endif
  34.   
  35.   #include <machine/pte.h>
  36.   #if !defined(ultrix) && !defined(sun)
  37.   # include <machine/machparam.h>
  38.   #endif
  39.   #include <sys/proc.h>
  40.   #include <nlist.h>
  41.   #include <sys/stat.h>
  42. ***************
  43. *** 147,152 ****
  44. --- 151,157 ----
  45.   ls_t lseek(), vtophys();
  46.   
  47.   void eread(), eseek();
  48.   #ifdef    ultrix
  49.   void exit(), nlist(), perror();
  50.   #endif
  51. ***************
  52. *** 168,183 ****
  53.       { "_proc" },
  54.   #define X_NPROC     1
  55.       {"_nproc"},
  56. ! #define X_USRPTMA    2
  57. !         {"_Usrptmap"},    
  58. ! #define X_USRPT        3
  59. !     {"_usrpt"},
  60. ! #define X_SYSMAP    4
  61.       {"_Sysmap"},
  62. ! #define    SFIL        5
  63.       { "_file" },
  64. ! #define    SNFILE        6
  65.       { "_nfile" },
  66.       { "" },
  67.   };
  68.   
  69. --- 173,191 ----
  70.       {"_proc"},
  71.   #define X_NPROC     1
  72.       {"_nproc"},
  73. ! #define X_SYSMAP    2
  74.       {"_Sysmap"},
  75. ! #define    SFIL        3
  76.       {"_file"},
  77. ! #define    SNFILE        4
  78.       {"_nfile"},
  79. + #ifndef sun
  80. + # define X_USRPTMA    5
  81. +     {"_Usrptmap"},
  82. + # define X_USRPT    6
  83. +     {"_usrpt"},
  84. + #endif
  85.       {""},
  86.   };
  87.   
  88. ***************
  89. *** 216,228 ****
  90. --- 224,239 ----
  91.    * and ULTRIX 2.2, using the lint libraries of the systems at the
  92.    * Purdue University Computing Center.
  93.    */
  94.   # if    !defined(ultrix) && !defined(DYNIX) && !defined(sun)
  95.       long lintlong;
  96.   # endif
  97.   # ifdef    ultrix
  98.       struct nch *lintnch;
  99.       float lintfloat;
  100.   # endif
  101.   # if    !defined(DYNIX)
  102.       file = fileNFILE = NULL;
  103.       fp = file;
  104. ***************
  105. *** 230,235 ****
  106. --- 241,247 ----
  107.       nfile = 0;
  108.       filen = nfile;
  109.   # endif
  110.   # if    !defined(ultrix) && !defined(DYNIX) && !defined(sun)
  111.       inode = inodeNINODE = rootdir = NULL;
  112.       i = inode;
  113. ***************
  114. *** 241,250 ****
  115. --- 253,264 ----
  116.       nextinodeid = lintlong;
  117.       filen = ninode;
  118.   # endif
  119.   # ifdef    sun
  120.       tcp_ttl = 0;
  121.       filen = tcp_ttl;
  122.   # endif
  123.   # ifdef    ultrix
  124.       nch = NULL;
  125.       lintnch = nch;
  126. ***************
  127. *** 272,294 ****
  128.               "usage: %s [-d ] [-k nlist core] [-n] [-p] names\n",
  129.               progname);
  130.   #else
  131. !         (void) fprintf(stderr,
  132. !             "usage: %s [-d ] [-n] [-p] names\n", progname);
  133.   #endif
  134.           (void) fprintf(stderr, "\t-d    = select verbose debugging output\n");
  135.   #ifdef    DYNIX
  136.           (void) fprintf(stderr,
  137.               "\t-k    = use specified nlist and core files\n");
  138.   #endif
  139.           (void) fprintf(stderr,
  140.               "\t-n    = interpret names as network connection, hexadecimal,\n");
  141.           (void) fprintf(stderr,
  142.               "\t        Protocol Control Block (PCB) addresses, as supplied\n");
  143. !         (void) fprintf(stderr,
  144. !             "\t        by netstat's -A option\n");
  145.           (void) fprintf(stderr, "\t-p    = print only process IDs\n");
  146. !         (void) fprintf(stderr,
  147. !             "\tnames = file names or PCB addresses\n");
  148.           exit(exitval);
  149.       }
  150.   
  151. --- 286,308 ----
  152.                  "usage: %s [-d ] [-k nlist core] [-n] [-p] names\n",
  153.                  progname);
  154.   #else
  155. !     (void) fprintf(stderr, "usage: %s [-d ] [-n] [-p] names\n", progname);
  156.   #endif
  157.       (void) fprintf(stderr, "\t-d    = select verbose debugging output\n");
  158.   #ifdef    DYNIX
  159.       (void) fprintf(stderr,
  160.                  "\t-k    = use specified nlist and core files\n");
  161.   #endif
  162.       (void) fprintf(stderr,
  163.        "\t-n    = interpret names as network connection, hexadecimal,\n");
  164.       (void) fprintf(stderr,
  165.        "\t        Protocol Control Block (PCB) addresses, as supplied\n");
  166. !     (void) fprintf(stderr, "\t        by netstat's -A option\n");
  167.       (void) fprintf(stderr, "\t-p    = print only process IDs\n");
  168. !     (void) fprintf(stderr, "\tnames = file names or PCB addresses\n");
  169.       exit(exitval);
  170.       }
  171.   
  172. ***************
  173. *** 303,309 ****
  174.               case 'd':
  175.                   debug = 1;
  176.                   break;
  177. ! #ifdef    DYNIX
  178.               case 'k':
  179.                   if ((ax + 2) >= argc) {
  180.                       (void) fprintf(stderr,
  181. --- 317,324 ----
  182.           case 'd':
  183.           debug = 1;
  184.           break;
  185. ! #if defined(DYNIX) || defined(sun)
  186.           case 'k':
  187.           if ((ax + 2) >= argc) {
  188.               (void) fprintf(stderr,
  189. ***************
  190. *** 310,316 ****
  191.                           "%s: no nlist/core after -k\n",
  192.                           progname);
  193.                       err++;
  194. !                 } else {
  195.                       namelist = argv[++ax];
  196.                       corefile = argv[++ax];
  197.                       k_opt = 1;
  198. --- 325,332 ----
  199.                      "%s: no nlist/core after -k\n",
  200.                      progname);
  201.               err++;
  202. !         }
  203. !         else {
  204.               namelist = argv[++ax];
  205.               corefile = argv[++ax];
  206.               k_opt = 1;
  207. ***************
  208. *** 318,323 ****
  209. --- 334,340 ----
  210.           }
  211.           break;
  212.   #endif
  213.           case 'n':
  214.           n_opt++;
  215.           break;
  216. ***************
  217. *** 327,334 ****
  218.                   break;
  219.   
  220.               default:
  221. !                 (void) fprintf(stderr,
  222. !                     "%s: unknown switch - %c\n",
  223.                       progname, *(ap - 1));
  224.                   err++;
  225.               }
  226. --- 344,350 ----
  227.           break;
  228.   
  229.           default:
  230. !         (void) fprintf(stderr, "%s: unknown switch - %c\n",
  231.                      progname, *(ap - 1));
  232.           err++;
  233.           }
  234. ***************
  235. *** 344,356 ****
  236.       }
  237.   
  238.   #ifdef sun
  239. !         if ((kd = kvm_open (NULL, NULL, NULL, O_RDONLY)) == 0) {
  240. !         (void) fprintf(stderr, "%s: can't access memory: ",
  241. !             progname);
  242.               perror ("");
  243.           exit(1);
  244.       }
  245.   #endif
  246.       if ((mem = open("/dev/mem", 0)) < 0) {
  247.           (void) fprintf(stderr, "%s: /dev/mem: ", progname);
  248.           perror("");
  249. --- 360,377 ----
  250.       }
  251.   
  252.   #ifdef sun
  253. !     if (kopt)
  254. !     kd = kvm_open(namelist, corefile, NULL, O_RDONLY, progname);
  255. !     else
  256. !     kd = kvm_open(NULL, NULL, NULL, O_RDONLY, progname);
  257. !     if (kd == 0) {
  258. !     (void) fprintf(stderr, "%s: can't access memory: ", progname);
  259.       perror("");
  260.       exit(1);
  261.       }
  262.   #endif
  263.       if ((mem = open("/dev/mem", 0)) < 0) {
  264.       (void) fprintf(stderr, "%s: /dev/mem: ", progname);
  265.       perror("");
  266. ***************
  267. *** 358,369 ****
  268.       }
  269.       if (k_opt) {
  270.           if ((kmem = open(corefile, 0)) < 0) {
  271. !             (void) fprintf(stderr, "%s: %s: ",
  272. !                 progname, corefile);
  273.               perror("");
  274.               exit(1);
  275.           }
  276. !     } else {
  277.           if ((kmem = open("/dev/kmem", 0)) < 0) {
  278.               (void) fprintf(stderr, "%s: /dev/kmem: ", progname);
  279.               perror("");
  280. --- 379,390 ----
  281.       }
  282.       if (k_opt) {
  283.       if ((kmem = open(corefile, 0)) < 0) {
  284. !         (void) fprintf(stderr, "%s: %s: ", progname, corefile);
  285.           perror("");
  286.           exit(1);
  287.       }
  288. !     }
  289. !     else {
  290.       if ((kmem = open("/dev/kmem", 0)) < 0) {
  291.           (void) fprintf(stderr, "%s: /dev/kmem: ", progname);
  292.           perror("");
  293. ***************
  294. *** 387,393 ****
  295.                   continue;
  296.               }
  297.               fsname = "";
  298. !         } else {
  299.               /* assume arg is  a filesystem */
  300.               if ((fs = getfsfile(argv[ax])) != NULL) {
  301.                   fsname = argv[ax];
  302. --- 408,415 ----
  303.           continue;
  304.           }
  305.           fsname = "";
  306. !     }
  307. !     else {
  308.           /* assume arg is  a filesystem */
  309.           if ((fs = getfsfile(argv[ax])) != NULL) {
  310.           fsname = argv[ax];
  311. ***************
  312. *** 396,406 ****
  313.                   else
  314.                       filename = fs->fs_spec;
  315.               /* maybe it's the device name for a filesystem */
  316. !             } else if ((fs = getfsspec(argv[ax])) != NULL) {
  317.                   filename = argv[ax];
  318.                   fsname = fs->fs_file;
  319.               /* probably a regular file */
  320. !             } else {
  321.                   filename = argv[ax];
  322.                   fsname = "";
  323.               }
  324. --- 418,430 ----
  325.           else
  326.               filename = fs->fs_spec;
  327.           /* maybe it's the device name for a filesystem */
  328. !         }
  329. !         else if ((fs = getfsspec(argv[ax])) != NULL) {
  330.           filename = argv[ax];
  331.           fsname = fs->fs_file;
  332.           /* probably a regular file */
  333. !         }
  334. !         else {
  335.           filename = argv[ax];
  336.           fsname = "";
  337.           }
  338. ***************
  339. *** 434,439 ****
  340. --- 458,464 ----
  341.           flags = 0;
  342.           if (p.p_stat == 0 || p.p_stat == SZOMB)
  343.           continue;
  344.   #ifdef sun
  345.           u = kvm_getu(kd, &p);
  346.   #else
  347. ***************
  348. *** 459,488 ****
  349.                       findf++;
  350.                   }
  351.               }
  352.   #ifdef    DYNIX
  353.               for (filen = 0; filen < u->u_nofile; filen++)
  354.   #else
  355.               for (filen = 0; filen < NOFILE; filen++)
  356.   #endif    
  357.               {
  358.                   struct file f;
  359.   
  360.                   flags = 0;
  361.                   if (n_opt) {
  362.   #ifdef    DYNIX
  363.                       if (u->u_lofile[filen].of_file != fp)
  364.   #else
  365.                       if (u->u_ofile[filen] != fp)
  366.   #endif
  367.                           continue;
  368. !                 } else {
  369.   #ifdef    DYNIX
  370.                       if (u->u_lofile[filen].of_file == NULL)
  371. -                         continue;
  372.   #else
  373.                       if (u->u_ofile[filen] == NULL)
  374. -                         continue;
  375.   #endif
  376.                   }
  377.   
  378.                   if (k_opt)
  379. --- 484,532 ----
  380.               findf++;
  381.           }
  382.           }
  383.   #ifdef    DYNIX
  384.           for (filen = 0; filen < u->u_nofile; filen++)
  385.   #else
  386. + # ifdef sun
  387. +         for (filen = 0; filen < NOFILE_IN_U; filen++)
  388. + # else
  389.           for (filen = 0; filen < NOFILE; filen++)
  390.   # endif
  391. + #endif
  392.           {
  393.           struct file f;
  394.   
  395.           flags = 0;
  396.           if (n_opt) {
  397.   #ifdef    DYNIX
  398.               if (u->u_lofile[filen].of_file != fp)
  399.   #else
  400. + # ifdef sun
  401. +             if (u->u_ofile_arr[filen] != fp)
  402. + # else
  403.               if (u->u_ofile[filen] != fp)
  404.   # endif
  405. + #endif
  406.               continue;
  407. !         }
  408. !         else {
  409.   #ifdef    DYNIX
  410.               if (u->u_lofile[filen].of_file == NULL)
  411.   #else
  412. + # ifdef sun
  413. +             if (u->u_ofile_arr[filen] == NULL)
  414. + # else
  415.               if (u->u_ofile[filen] == NULL)
  416.   # endif
  417. + #endif
  418. +             continue;
  419.           }
  420.   
  421.           if (k_opt)
  422. ***************
  423. *** 491,502 ****
  424. --- 535,553 ----
  425.   #else
  426.               eseek(kmem, vtophys((ls_t) u->u_ofile[filen]), 0, "file");
  427.   #endif
  428.           else
  429.   #ifdef    DYNIX
  430.               eseek(kmem, (ls_t) u->u_lofile[filen].of_file, 0, "file");
  431.   #else
  432. + # ifdef sun
  433. +             eseek(kmem, (ls_t) u->u_ofile_arr[filen], 0, "file");
  434. + # else
  435.               eseek(kmem, (ls_t) u->u_ofile[filen], 0, "file");
  436.   # endif
  437. + #endif
  438.           eread(kmem, (char *) &f, sizeof(f), "file");
  439.   
  440.           if (f.f_count > 0) {
  441. ***************
  442. *** 505,510 ****
  443. --- 556,562 ----
  444.               findf++;
  445.               continue;
  446.               }
  447.   #if    defined(DYNIX) || defined(sun)
  448.               if (f.f_type != DTYPE_VNODE)
  449.   #else
  450. ***************
  451. *** 511,520 ****
  452. --- 563,574 ----
  453.               if (f.f_type != DTYPE_INODE)
  454.   #endif
  455.               continue;
  456.   #if    defined(DYNIX) || defined(sun)
  457.               i = getinode((struct vnode *) f.f_data,
  458.                    "ofile");
  459.   #else
  460.   # ifdef    ultrix
  461.               i = getinode((struct gnode *) f.f_data,
  462.                    "ofile");
  463. ***************
  464. *** 523,529 ****
  465. --- 577,585 ----
  466.                    "ofile");
  467.   # endif
  468.   #endif
  469.               if (check(&s, i)) {
  470.   #if !defined(ultrix)
  471.               opninode = i->i_number;
  472.   #else
  473. ***************
  474. *** 594,600 ****
  475.               (void) strcat(ty, "/s");
  476.           else if (f & EXFILE)
  477.               (void) strcat(ty, "/x");
  478. !     } else if (f & CDIR)
  479.           ty = "cwd";
  480.       else if (f & RDIR)
  481.           ty = "rdir";
  482. --- 650,657 ----
  483.           (void) strcat(ty, "/s");
  484.       else if (f & EXFILE)
  485.           (void) strcat(ty, "/x");
  486. !     }
  487. !     else if (f & CDIR)
  488.       ty = "cwd";
  489.       else if (f & RDIR)
  490.       ty = "rdir";
  491. ***************
  492. *** 621,626 ****
  493. --- 678,684 ----
  494.    */
  495.   check(s, i)
  496.       struct stat *s;
  497.   #ifdef ultrix
  498.       struct gnode *i;
  499.   #else
  500. ***************
  501. *** 629,634 ****
  502. --- 687,693 ----
  503.   {
  504.       if (s == (struct stat *) NULL)
  505.       return 0;
  506.   #ifdef ultrix
  507.       if (i == (struct gnode *) NULL)
  508.       return 0;
  509. ***************
  510. *** 637,643 ****
  511.       else if ((s->st_dev == i->g_dev) && (s->st_ino == i->g_req.gr_number))
  512.               return 1;
  513.   #else
  514. !     if (i == (struct inode *)NULL) return 0;
  515.       if ((s->st_mode & S_IFMT) == S_IFBLK && s->st_rdev == i->i_dev)
  516.               return 1;
  517.       else if ((s->st_dev == i->i_dev) && (s->st_ino == i->i_number))
  518. --- 696,703 ----
  519.       else if ((s->st_dev == i->g_dev) && (s->st_ino == i->g_req.gr_number))
  520.       return 1;
  521.   #else
  522. !     if (i == (struct inode *) NULL)
  523. !     return 0;
  524.       if ((s->st_mode & S_IFMT) == S_IFBLK && s->st_rdev == i->i_dev)
  525.       return 1;
  526.       else if ((s->st_dev == i->i_dev) && (s->st_ino == i->i_number))
  527. ***************
  528. *** 647,653 ****
  529.       else if (s->st_rdev == i->i_dev && i->i_number == 0)
  530.               return 1;
  531.   #endif
  532. !     else return 0;
  533.   }
  534.   
  535.   
  536. --- 707,714 ----
  537.       else if (s->st_rdev == i->i_dev && i->i_number == 0)
  538.       return 1;
  539.   #endif
  540. !     else
  541. !     return 0;
  542.   }
  543.   
  544.   
  545. ***************
  546. *** 655,660 ****
  547. --- 716,722 ----
  548.    *    getinode - read an inode from from mem at address "addr"
  549.    *           return pointer to inode struct.
  550.    */
  551.   #if defined(DYNIX) || defined(sun)
  552.   struct inode *
  553.   getinode(ip, s)
  554. ***************
  555. *** 663,672 ****
  556.   {
  557.       static struct inode i;
  558.       static struct vnode v;
  559.   #ifdef    sun
  560.       struct snode sn;
  561.   #endif
  562.       if (ip == NULL)
  563.           return(NULL);
  564.       if (k_opt)
  565. --- 725,734 ----
  566.   {
  567.       static struct inode i;
  568.       static struct vnode v;
  569.   # ifdef    sun
  570.       struct snode sn;
  571.   # endif
  572.       if (ip == NULL)
  573.       return (NULL);
  574.       if (k_opt)
  575. ***************
  576. *** 681,697 ****
  577.           eseek(kmem, vtophys((ls_t)v.v_data), 0, "inode");
  578.       else
  579.           eseek(kmem, (ls_t)v.v_data, 0, "inode");
  580.   #ifdef    sun
  581.       if (v.v_type == VBLK || v.v_type == VCHR || v.v_type == VFIFO) {
  582.           eread(kmem, (char *)&sn, sizeof(sn), "snode");
  583.           if (debug)
  584. !             (void) printf(
  585. !                 "snode %s at %x %x dev=%x realvp=%x bdevvp=%x\n",
  586.                   s, ip, sn.s_vnode.v_type, sn.s_dev,
  587.                   sn.s_realvp, sn.s_bdevvp);
  588.           if (sn.s_realvp || sn.s_bdevvp) {
  589. !             eseek(kmem,
  590. !                 (sn.s_realvp) ? (ls_t)sn.s_realvp
  591.                             : (ls_t)sn.s_bdevvp,
  592.                   0, "rvnode");
  593.               eread(kmem, (char *)&v, sizeof(v), "rvnode");
  594. --- 743,758 ----
  595.       eseek(kmem, vtophys((ls_t) v.v_data), 0, "inode");
  596.       else
  597.       eseek(kmem, (ls_t) v.v_data, 0, "inode");
  598.   # ifdef    sun
  599.       if (v.v_type == VBLK || v.v_type == VCHR || v.v_type == VFIFO) {
  600.       eread(kmem, (char *) &sn, sizeof(sn), "snode");
  601.       if (debug)
  602. !         (void) printf("snode %s at %x %x dev=%x realvp=%x bdevvp=%x\n",
  603.                 s, ip, sn.s_vnode.v_type, sn.s_dev,
  604.                 sn.s_realvp, sn.s_bdevvp);
  605.       if (sn.s_realvp || sn.s_bdevvp) {
  606. !         eseek(kmem, (sn.s_realvp) ? (ls_t) sn.s_realvp
  607.             : (ls_t) sn.s_bdevvp,
  608.             0, "rvnode");
  609.           eread(kmem, (char *) &v, sizeof(v), "rvnode");
  610. ***************
  611. *** 714,719 ****
  612. --- 775,781 ----
  613.   struct gnode *
  614.   getinode(ip, s)
  615.       struct gnode *ip;
  616.   # else
  617.   
  618.   struct inode *
  619. ***************
  620. *** 720,734 ****
  621.   getinode(ip, s)
  622.       struct inode *ip;
  623.   #endif
  624.       char *s;
  625.   {
  626.   #if defined(ultrix) 
  627.       static struct gnode i;
  628.   #else
  629.       static struct inode i;
  630.   #endif
  631.       eseek(kmem, (ls_t)ip, 0, "inode");
  632.       eread(kmem, (char *)&i, sizeof(i), "inode");
  633.       return &i;
  634. --- 782,795 ----
  635.   getinode(ip, s)
  636.       struct inode *ip;
  637.   # endif
  638.       char *s;
  639.   {
  640.   # if defined(ultrix)
  641.       static struct gnode i;
  642.   # else
  643.       static struct inode i;
  644.   # endif
  645.       eseek(kmem, (ls_t) ip, 0, "inode");
  646.       eread(kmem, (char *) &i, sizeof(i), "inode");
  647.       return &i;
  648. ***************
  649. *** 740,745 ****
  650. --- 801,807 ----
  651.    * get user page for proc "p" from core or swap
  652.    * return pointer to user struct
  653.    */
  654.   # ifdef    DYNIX
  655.   struct user *
  656.   getuser(p)
  657. ***************
  658. *** 782,788 ****
  659.           }
  660.           if (debug)
  661.               (void) printf("read swap\n");
  662. !     } else {
  663.           if (k_opt)
  664.               (void) lseek(kmem, vtophys((ls_t)p->p_uarea), L_SET);
  665.           else
  666. --- 844,851 ----
  667.       }
  668.       if (debug)
  669.           (void) printf("read swap\n");
  670. !     }
  671. !     else {
  672.       if (k_opt)
  673.           (void) lseek(kmem, vtophys((ls_t) p->p_uarea), L_SET);
  674.       else
  675. ***************
  676. *** 816,822 ****
  677.           }
  678.           if (debug)
  679.               (void) printf("read swap\n");
  680. !     } else {     /* boo */
  681.           ptep = &Usrptma[btokmx(p->p_p0br) + p->p_szpt - 1];
  682.   
  683.           /* get the page table for the user page */
  684. --- 879,886 ----
  685.       }
  686.       if (debug)
  687.           (void) printf("read swap\n");
  688. !     }
  689. !     else {            /* boo */
  690.       ptep = &Usrptma[btokmx(p->p_p0br) + p->p_szpt - 1];
  691.   
  692.       /* get the page table for the user page */
  693. ***************
  694. *** 850,857 ****
  695.       return &user;
  696.   }
  697.   #endif
  698.   
  699. - #endif
  700.   /*
  701.    * read with error checking
  702.    */
  703. --- 914,921 ----
  704.       return &user;
  705.   }
  706.   # endif
  707. + #endif                /* !sun */
  708.   
  709.   /*
  710.    * read with error checking
  711.    */
  712. ***************
  713. *** 863,868 ****
  714. --- 927,933 ----
  715.       char *s;
  716.   {
  717.       char buf[100];
  718.       if (read(fd, p, size) != size) {
  719.       if (!k_opt) {
  720.           (void) fprintf(stderr, "%s: eread ", progname);
  721. ***************
  722. *** 915,920 ****
  723. --- 980,986 ----
  724.       register i;
  725.   
  726.       if (k_opt) {
  727.   #ifdef    ultrix
  728.       (void) nlist(namelist, nl);
  729.   #else                /* not ultrix */
  730. ***************
  731. *** 925,946 ****
  732.               exit(1);
  733.           }
  734.   #endif    /* ultrix */
  735. !     } else {
  736.   #ifdef    ultrix
  737.           (void) nlist("/vmunix", nl);
  738.   #else    /* not ultrix */
  739.   #ifdef    DYNIX
  740.           if (nlist("/dynix", nl) == -1)
  741.   #else    /* not DYNIX */
  742.           if (nlist("/vmunix", nl) == -1)
  743.   #endif    /* DYNIX */
  744.           {
  745. !             (void) fprintf(stderr,
  746. !                 "%s: can't get name list from %s\n",
  747.   #ifdef    DYNIX
  748. !                 progname, "/dynix");
  749.   #else    /* not DYNIX */
  750. !                 progname, "/vmunix");
  751.   #endif    /* DYNIX */
  752.               exit(1);
  753.           }
  754. --- 991,1016 ----
  755.           exit(1);
  756.       }
  757.   #endif                /* ultrix */
  758. !     }
  759. !     else {
  760.   #ifdef    ultrix
  761.       (void) nlist("/vmunix", nl);
  762.   #else                /* not ultrix */
  763.   # ifdef    DYNIX
  764.       if (nlist("/dynix", nl) == -1)
  765.   # else                /* not DYNIX */
  766.       if (nlist("/vmunix", nl) == -1)
  767.   # endif                /* DYNIX */
  768.       {
  769. !         (void) fprintf(stderr, "%s: can't get name list from %s\n", progname
  770.   # ifdef    DYNIX
  771. !                "/dynix");
  772.   # else                /* not DYNIX */
  773. !                "/vmunix");
  774.   # endif                /* DYNIX */
  775.           exit(1);
  776.       }
  777. ***************
  778. *** 959,968 ****
  779. --- 1029,1040 ----
  780.       eseek(kmem, (ls_t) (nl[X_NPROC].n_value), 0, "nproc");
  781.       eread(kmem, (char *) &nproc, sizeof(nproc), "nproc");
  782.   
  783. + #ifndef sun
  784.   # ifndef    DYNIX
  785.       Usrptma = (struct pte *) nl[X_USRPTMA].n_value;
  786.       usrpt = (struct pte *) nl[X_USRPT].n_value;    /* used by <vmmac.h> */
  787.   # endif
  788. + #endif
  789.       return;
  790.   }
  791.   
  792. ***************
  793. *** 973,982 ****
  794.       int n;
  795.       struct proc *p;
  796.   {
  797.       if (k_opt)
  798. !         eseek(kmem, vtophys((ls_t)(procbase + (long)(n * sizeof(struct proc)))), 0, "proc");
  799.       else
  800. !         eseek(kmem, (ls_t)(procbase + (long)(n * sizeof(struct proc))), 0, "proc");
  801.       eread(kmem, (char *)p, sizeof(struct proc), "proc");
  802.       return;
  803.   }
  804. --- 1045,1055 ----
  805.       int n;
  806.       struct proc *p;
  807.   {
  808. +     register ls_t p_off = (ls_t)(procbase + (long)(n * sizeof(struct proc)));
  809.       if (k_opt)
  810. !     eseek(kmem, vtophys(p_off), 0, "proc");
  811.       else
  812. !     eseek(kmem, p_off, 0, "proc");
  813.       eread(kmem, (char *) p, sizeof(struct proc), "proc");
  814.       return;
  815.   }
  816. ***************
  817. *** 1001,1010 ****
  818.       paddr = (int)((int *)paddr + (vaddr / NBPG));
  819.       (void) lseek(kmem, (ls_t)paddr, 0);
  820.       (void) read(kmem, (char *)&paddr, sizeof paddr);
  821. ! #ifndef    i386
  822. ! # define    PTBITS    0x1ff    /* 512 byte pages */
  823. ! #else
  824.   # define    PTBITS    0xfff    /* 4096 byte pages */
  825.   #endif
  826.   
  827.       return ((ls_t)(paddr & ~PTBITS) | (vaddr & PTBITS));
  828. --- 1074,1089 ----
  829.       paddr = (int) ((int *) paddr + (vaddr / NBPG));
  830.       (void) lseek(kmem, (ls_t) paddr, 0);
  831.       (void) read(kmem, (char *) &paddr, sizeof paddr);
  832. ! #if defined(i386) || defined(sun4c)
  833.   # define    PTBITS    0xfff        /* 4096 byte pages */
  834. + #endif
  835. + #if defined(sun) && !defined(sun4c)
  836. + # define    PTBITS    0x1fff        /* 8192 byte pages */
  837. + #endif
  838. + #ifndef PTBITS
  839. + # define    PTBITS    0x1ff        /* 512 byte pages */
  840.   #endif
  841.   
  842.       return ((ls_t) (paddr & ~PTBITS) | (vaddr & PTBITS));
  843.  
  844.